//导入用户集合构造函数
const {User}=require('../../model/user');
//密码对比
const bcrypt=require('bcrypt');
const login= async(req,res)=>{
    //接收请求参数并解构出来
    const {email,password}=req.body;
    //判断  如果用户没有输入邮件地址或者没有输入密码 trim()方法是去除空格
    if(email.trim().length==0||password.trim().length==0){
        //终止程序并修改状态码为400
        //render类似于重定向第一个是重定向的页面地址 第二个是可以填坑的模板对象
       return  res.status(400).render('admin/error',{msg:'邮件地址或者密码错误'})
    }
    //根据邮箱地址查询用户信息
    //如果查询到了用户 user变量的值是对象类型
    //如果没有查询到用户  user的变量为空
    let user= await User.findOne({email:email});
    if(user){
        //查询到了用户  将客户端传递过来的密码跟用户信息中的密码进行比对
        //第一个参数是客户端传过来的密码 第二个是通过user.js文件加密之后的密码
        //这个方法返回一个布尔值  
        let isValid=await bcrypt.compare(password,user.password);
        if(isValid){
            //存储登录成功后的用户名在客户端的Cookies
            req.session.username=user.username;
            //储存登录成功后的用户角色在客户端的Cookies
            req.session.role=user.role;
            //让所有的模板能够调用  这里的req.app=app 不用再连接app.js这个文件了
            req.app.locals.userInfo=user;
            //登录成功
           //判断用户是超级管理员还是普通成员
           if(user.role=='admin'){
               //超级管理员重定向到后台管理页面
               res.redirect('/admin/user');
           }else{
               //普通成员重定向到首页
               res.redirect('/home/');
           }
        }else{
            //密码错误
            res.status(400).render('admin/error',{msg:'邮件地址或者密码错误'})
        }
       
    }else{
        //没有查询到用户
        res.status(400).render('admin/error',{msg:'邮件地址或者密码错误'})
    }
}
module.exports=login;